import vnode from './vnode.js' // 导入vnode模块，它可能是一个用于创建虚拟DOM节点的函数  
  
// 定义一个简化版的h函数，用于创建虚拟DOM节点  
// h函数可以接受三种类型的第三个参数c：字符串或数字、数组、或具有sel属性的对象  
export default function(sel, data, c) {  
    // 检查是否传入了正确数量的参数（3个）  
    if (arguments.length !== 3) {  
        throw new Error("请传入正确的参数");  
    }  
  
    // 如果c是字符串或数字，表示这是文本内容  
    if (typeof c === "string" || typeof c === "number") {  
        // 调用vnode函数，传入选择器、数据、子节点（undefined，因为这里是文本内容）、文本内容和未定义的key  
        return vnode(sel, data, undefined, c, undefined);  
    }  
  
    // 如果c是数组，表示这是子节点列表  
    else if (Array.isArray(c)) {  
        let children = []; // 初始化子节点数组  
        for (let i = 0; i < c.length; i++) {  
            // 这里原本的逻辑有误，应该是检查c[i]的类型或属性，而不是c本身  
            // 修正为检查c[i]是否为对象且拥有sel属性，或者是否为vnode节点（这里假设vnode节点有sel属性）  
            if (!(typeof c[i] === "object" && c[i].hasOwnProperty("sel"))) {  
                throw new Error("请传入正确的参数，子节点应为对象且拥有sel属性或为vnode节点");  
            }  
            children.push(c[i]); // 将子节点添加到数组中  
        }  
        // 调用vnode函数，传入选择器、数据、子节点数组、未定义的文本内容和未定义的key  
        return vnode(sel, data, children, undefined, undefined);  
    }  
  
    // 如果c是对象且拥有sel属性，表示这是单个子节点（可能是另一个vnode）  
    else if (typeof c === "object" && c.hasOwnProperty("sel")) {  
        let children = [c]; // 将c作为唯一子节点放入数组  
        // 调用vnode函数，传入选择器、数据、子节点数组（包含c）、未定义的文本内容和未定义的key  
        return vnode(sel, data, children, undefined, undefined);  
    }  
  
    // 如果以上条件都不满足，则抛出错误  
    else {  
        throw new Error("请传入正确的参数");  
    }  
}